/**
 * 新闻相关类型定义文件
 * 定义了新闻模块使用的数据结构和状态枚举
 * 为整个系统的新闻管理功能提供类型支持
 */
import { Category } from './index';

/**
 * 新闻数据接口
 * 定义了系统中新闻文章的完整数据结构，与MongoDB模型完全匹配
 * 包含新闻的内容、分类、状态和统计信息等
 */
export interface News {
  id: string | number;       // 新闻ID，对应MongoDB的_id
  _id?: string;              // MongoDB原始ID，兼容后端直接返回_id的情况
  title: string;             // 新闻标题
  categoryId: string | number | { _id: string; }; // 分类ID，对应MongoDB的ObjectId
  content: string;           // 新闻正文内容，富文本格式
  region: string;            // 所属区域，用于区域隔离
  author: string;            // 作者用户名，关联到用户
  roleId: string | number;   // 作者的角色ID，对应MongoDB的ObjectId
  auditState: number;        // 审核状态：0-草稿箱 1-审核中 2-已通过 3-未通过
  publishState: number;      // 发布状态：0-未发布 1-已发布 2-已下线
  createTime: number;        // 创建时间（时间戳，毫秒）
  star: number;              // 点赞/收藏数量
  view: number;              // 浏览量
  publishTime?: number;      // 发布时间（时间戳，毫秒），可选
  category?: Category;       // 分类信息，可能通过关联查询填充（前端扩展，非模型字段）
  auditReason?: string;      // 审核意见，审核未通过时提供
  reason?: string;           // 审核拒绝原因，与auditReason字段作用相同，兼容API返回
  cover?: string | File;     // 新闻封面图片URL或File对象（用于上传）
  seqId?: number;            // 序列ID，用于业务逻辑中的唯一标识
  __v?: number;              // MongoDB版本号
}

/**
 * 新闻审核状态枚举，与后端保持一致
 * 定义了新闻在审核流程中的各个状态
 * 用于标识新闻当前所处的审核阶段
 */
export enum AuditState {
  DRAFT = 0,        // 草稿状态：未提交审核的新闻
  PENDING = 1,      // 待审核状态：已提交等待审核的新闻
  APPROVED = 2,     // 已通过状态：审核通过可以发布的新闻
  REJECTED = 3      // 未通过状态：审核被拒绝需要修改的新闻
}

/**
 * 新闻发布状态枚举，与后端保持一致
 * 定义了新闻在发布流程中的各个状态
 * 用于标识新闻当前所处的发布阶段
 */
export enum PublishState {
  UNPUBLISHED = 0,  // 未发布状态：审核通过但未安排发布的新闻
  PENDING = 1,      // 待发布状态：准备发布的新闻
  PUBLISHED = 2,    // 已发布状态：已经发布上线的新闻
  SUNSET = 3        // 已下线状态：曾经发布过但现已下线的新闻
} 